Skip to content

Apply Georgia HB463 (2025-2026) tax cuts and refactor GA flat-tax rate structure#8306

Draft
DTrim99 wants to merge 3 commits into
PolicyEngine:mainfrom
DTrim99:ga-hb463-2026-tax-cuts
Draft

Apply Georgia HB463 (2025-2026) tax cuts and refactor GA flat-tax rate structure#8306
DTrim99 wants to merge 3 commits into
PolicyEngine:mainfrom
DTrim99:ga-hb463-2026-tax-cuts

Conversation

@DTrim99
Copy link
Copy Markdown
Collaborator

@DTrim99 DTrim99 commented May 14, 2026

Summary

Implements Georgia HB463 (2025-2026 session, signed 2026; bill text) and refactors the GA tax-rate parameter structure to make the 2024 flat-tax transition explicit.

The PR has two parts:

  1. HB463 direct changes — rate cut, standard deduction increase, dependent exemption increase, retirement income exclusion increase, and new overtime/tips exclusions.
  2. Rate-structure refactor — split the GA tax rate into an explicit flat_applies boolean + a single flat_rate parameter, so future flat-rate changes (like HB463's 4.99%) are a one-parameter edit instead of touching 25 places (5 brackets × 5 filing-status files).

Closes #8305.

Rate-structure refactor

New parameter Type Purpose
gov.states.ga.tax.income.main.flat_applies bool false pre-2024; true from 2024-01-01. Description states explicitly that when false, the per-filing-status progressive bracket structure under gov.states.ga.tax.income.main.{single,joint,separate,head_of_household,surviving_spouse} applies instead.
gov.states.ga.tax.income.main.flat_rate rate The flat rate when flat_applies is true: 5.39% (2024), 5.19% (2025), 4.99% (2026).

ga_income_tax_before_non_refundable_credits.py now branches on flat_applies: when true, returns flat_rate * income; when false, dispatches to the existing per-filing-status progressive brackets.

The five progressive bracket files (main/{single,joint,separate,head_of_household,surviving_spouse}.yaml) keep their pre-2024 rate entries only; the 2024+ duplicate rate entries that the previous structure required have been removed.

HB463 direct changes (no revenue trigger)

Provision Statute Pre-HB463 TY 2026+
Flat tax rate O.C.G.A. § 48-7-20(a.1) 5.19% 4.99%
Standard deduction (JOINT / SURVIVING_SPOUSE) § 48-7-27(a)(1)(B)(i) $24,000 $30,000
Standard deduction (SINGLE / HoH / SEPARATE) § 48-7-27(a)(1)(B)(ii) $12,000 $15,000
Dependent exemption § 48-7-26(b) $4,000 $5,000
Age-65+ retirement income exclusion (TY 2027+) § 48-7-27(a)(5)(A)(xiv) $65,000 $70,000

HB463 new exclusions (TY 2026-2028, self-repealing)

Both new variables are added to gov.states.ga.tax.income.subtractions.subtractions from 2026-01-01 and removed from the list at 2029-01-01 to model the December 31, 2028 self-repeal.

  • ga_qualified_overtime_exclusion — § 48-7-27(a)(16). Up to $1,750 of qualified overtime compensation (IRC § 225) per full-time hourly employee. Approximated using fsla_overtime_premium, the federally-defined FLSA overtime premium, which by definition applies to non-exempt (hourly) workers.
  • ga_cash_tip_exclusion — § 48-7-27(a)(17). Up to $1,750 of cash tips per employee in a customarily-tipped occupation. Uses tip_income gated by tip_income_deduction_occupation_requirement_met (Treasury Tipped Occupation Code list).

Trigger-conditional provisions documented but NOT modeled

The bill provides for prospective annual reductions/increases subject to revenue-shortfall-reserve and Governor's-revenue-estimate triggers. Whether the triggers fire in any given year cannot be predicted from the bill alone, so these provisions are described in YAML comments only:

  • § 48-7-20(a.1)(2) — Future annual rate cuts of 0.10% per year (target 3.99%)
  • § 48-7-27(a)(1.1) — Future SD increases of $750 (joint) / $375 (single etc.) per year (targets $36,000 / $18,000)
  • § 48-7-26(b) — Future dependent-exemption increases of $125 per year (target $6,000)

Files

Parameters added (refactor):

  • policyengine_us/parameters/gov/states/ga/tax/income/main/flat_applies.yaml
  • policyengine_us/parameters/gov/states/ga/tax/income/main/flat_rate.yaml

Parameters modified (refactor):

  • policyengine_us/parameters/gov/states/ga/tax/income/main/{single,joint,separate,head_of_household,surviving_spouse}.yaml — strip 2024+ duplicate rate entries

Parameters added (HB463):

  • policyengine_us/parameters/gov/states/ga/tax/income/agi/exclusions/overtime/cap.yaml — $1,750
  • policyengine_us/parameters/gov/states/ga/tax/income/agi/exclusions/tips/cap.yaml — $1,750

Parameters modified (HB463):

  • policyengine_us/parameters/gov/states/ga/tax/income/deductions/standard/amount.yaml — 2026-01-01 raised SD by filing status
  • policyengine_us/parameters/gov/states/ga/tax/income/exemptions/dependent.yaml — 2026-01-01: $5,000
  • policyengine_us/parameters/gov/states/ga/tax/income/agi/exclusions/retirement/cap/older.yaml — 2027-01-01: $70,000
  • policyengine_us/parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml — adds overtime/tips from 2026, removes them from 2029

Variables modified (refactor):

  • policyengine_us/variables/gov/states/ga/tax/income/ga_income_tax_before_non_refundable_credits.py — switch on flat_applies

Variables added (HB463):

  • policyengine_us/variables/gov/states/ga/tax/income/ga_qualified_overtime_exclusion.py
  • policyengine_us/variables/gov/states/ga/tax/income/ga_cash_tip_exclusion.py

Tests added: policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/ga_hb463_integration.yaml plus 2 new 2026 rate cases in the existing ga_income_tax_before_non_refundable_credits.yaml.

Test plan

  • All 28 affected GA tax tests pass locally (pre-2024 progressive cases + 2024-2026 flat-rate cases + 8 HB463 integration tests)
  • Full CI passes
  • Reviewer confirms the overtime/tip exclusion approximation (FLSA overtime premium / Treasury Tipped Occupation Code) is acceptable, or proposes a more precise eligibility check

HB463 (signed 2026, https://www.legis.ga.gov/api/legislation/document/20252026/249080)
revises Georgia's individual income tax in five places. This PR implements the
direct provisions and notes the trigger-conditional prospective provisions in
parameter comments without modeling them.

Direct changes (no revenue trigger):
- Tax rate: 5.19% -> 4.99% for TY 2026, applied to all five filing-status
  rate files (Section 2-1, O.C.G.A. 48-7-20(a.1))
- Standard deduction: JOINT $24,000 -> $30,000, SINGLE/HoH/SEPARATE/SURVIVING_SPOUSE
  $12,000 -> $15,000 for TY 2026 (Section 2-3, O.C.G.A. 48-7-27(a)(1)(B))
- Dependent exemption: $4,000 -> $5,000 per dependent for TY 2026
  (Section 2-2, O.C.G.A. 48-7-26(b))
- Age-65+ retirement income exclusion: cap raised from $65,000 to $70,000
  effective TY 2027 (Section 2-3, O.C.G.A. 48-7-27(a)(5)(A)(xiv))

New exclusions (TY 2026-2028, self-repealing):
- ga_qualified_overtime_exclusion: up to $1,750 of qualified overtime
  compensation per full-time hourly employee (Section 2-4, O.C.G.A.
  48-7-27(a)(16)). Approximated via fsla_overtime_premium.
- ga_cash_tip_exclusion: up to $1,750 of cash tips per employee in a
  customarily-tipped occupation (Section 2-4, O.C.G.A. 48-7-27(a)(17)).
  Uses tip_income gated by tip_income_deduction_occupation_requirement_met.
- Both added to gov.states.ga.tax.income.subtractions.subtractions from
  2026-01-01 and removed from the list at 2029-01-01 to self-repeal.

Trigger-conditional provisions documented but NOT modeled:
- Section 2-1 paragraph (2): future annual rate cuts of 0.10% per year
  (target 3.99%) subject to Governor's revenue estimate growth, prior-year
  net revenue, and Revenue Shortfall Reserve coverage of the projected
  revenue loss.
- Section 2-3 paragraph (1.1): future SD increases of $750 (joint) /
  $375 (single etc.) per year (targets $36,000 / $18,000), subject to the
  same triggers.
- Section 2-2: future dependent-exemption increases of $125 per year
  (target $6,000), subject to the same triggers.

Whether the triggers fire in any year cannot be predicted from the bill, so
these prospective provisions are described in YAML comments only.

Tests: 26/26 affected GA tests pass locally, including 8 HB463 integration
tests covering rate, SD, dependent exemption, retirement exclusion,
overtime exclusion (active 2026 + self-repealed 2029), and cash-tip
exclusion (occupation-eligible vs not).

Closes PolicyEngine#8305

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented May 14, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (8cb60e7) to head (1fad697).
⚠️ Report is 23 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8306   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         3           
  Lines           63        46   -17     
  Branches         0         1    +1     
=========================================
- Hits            63        46   -17     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…meter

Georgia transitioned from a progressive bracket structure to a flat tax
beginning tax year 2024 (HB1015). Previously the model encoded the flat
period as five filing-status bracket files all sharing one rate per year,
which obscured the statutory transition and forced HB463's 4.99% change to
touch 25 places (5 brackets x 5 filing-status files).

This refactor splits the rate logic into two named branches:
- gov.states.ga.tax.income.main.flat_applies (bool): true from 2024-01-01.
  Description: "Georgia applies the flat-tax structure when this indicator
  is true; when false, the per-filing-status progressive bracket structure
  under gov.states.ga.tax.income.main.{single,joint,separate,
  head_of_household,surviving_spouse} applies instead."
- gov.states.ga.tax.income.main.flat_rate (rate): 5.39% / 5.19% / 4.99%
  by tax year 2024 / 2025 / 2026.

ga_income_tax_before_non_refundable_credits.py now switches on
flat_applies: when true, returns flat_rate * income; when false, dispatches
to the per-filing-status progressive brackets.

The five progressive bracket files now contain only the pre-2024 rates
(2021-01-01 entries through the 0.0575 top rate). The 2024+ duplicate rate
entries have been removed since flat_applies/flat_rate now govern those
tax years.

Tests: 28/28 GA tax tests pass (covers pre-2024 progressive and
2024-2026 flat-rate cases).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@DTrim99 DTrim99 changed the title Apply Georgia HB463 (2025-2026): rate cut, SD/exemption/retirement increases, tips and overtime exclusions Apply Georgia HB463 (2025-2026) tax cuts and refactor GA flat-tax rate structure May 14, 2026
@DTrim99
Copy link
Copy Markdown
Collaborator Author

DTrim99 commented May 14, 2026

Program Review

Automated /review-program pass: 4 code validators + 2 PDF audit agents over HB463 pp.1-12.

Source Documents

Summary

The implementation faithfully encodes HB463's parameter values and effective dates. The refactor (flat_applies boolean + single flat_rate parameter) is well-structured with no date gaps — flat_applies becomes true at 2024-01-01 and flat_rate.yaml has a matching 2024-01-01 entry of 5.39%. Trigger-conditional prospective increments are correctly documented but not modeled. fsla_overtime_premium is the canonical variable name in the codebase (codebase typo, pre-existing — not introduced here). Per-person caps are applied correctly before tax-unit aggregation. CI passes 16/24 as of report time with the remaining 8 pending (none failing).

Critical (Must Fix)

  1. Railway carve-out for overtime not modeled — §48-7-27(a)(16)(B) (PDF p.6). Bill: "Notwithstanding subparagraph (A), for employers governed by the federal National Railway Labor Act, the exemption shall apply to hourly component overtime compensation as defined in applicable collective bargaining agreements." Railway workers are FLSA-exempt under 29 U.S.C. §213(b)(2), so fsla_overtime_premium returns zero for them. The current implementation therefore denies the exclusion entirely to railway workers, contradicting the bill's explicit extension to them via CBA-defined overtime. This is a specific eligible group being silently excluded, not just a documentation gap. Either model the CBA-based overtime (probably impractical) or document the limitation prominently in ga_qualified_overtime_exclusion.py's docstring as a known omission.

  2. Missing #page= anchors on every HB463 href (7 files) — flat_rate.yaml, exemptions/dependent.yaml, deductions/standard/amount.yaml, agi/exclusions/retirement/cap/older.yaml, agi/exclusions/overtime/cap.yaml, agi/exclusions/tips/cap.yaml, subtractions/subtractions.yaml. Clicking any HB463 link lands on the bill caption (p.1) and the reader must scroll/search. Anchors per PDF manifest:

    • flat_rate → #page=2 (rate amendment)
    • dependent → #page=3
    • standard deduction → #page=3 (or #page=4)
    • retirement older → #page=5 or #page=6
    • overtime → #page=6
    • tips → #page=7
    • subtractions (overtime/tips block) → #page=6
  3. Refactor regression coverage gap: 2024+ flat regime untested for HEAD_OF_HOUSEHOLD, SEPARATE, and SURVIVING_SPOUSE. Only SINGLE has a 2024 test; only SINGLE+JOINT have 2025/2026 tests. A regression that re-introduced per-status dispatch under the flat era would pass CI. Add at least one TY 2024, TY 2025, and TY 2026 case for each of HoH, MFS, and SS.

  4. 2023 boundary (last progressive year) untested. The flat_applies flip at 2024-01-01 is the critical refactor branch. With 2022 → 2024 jumping cleanly across the flip, no test verifies the formula picks the progressive branch in 2023. Add a TY 2023 case under each filing status.

Should Address

  1. SURVIVING_SPOUSE standard deduction silently changes tier in 2026deductions/standard/amount.yaml raises SS from $12,000 (SINGLE/HoH/MFS tier historically) to $30,000 (JOINT tier) in 2026. The bill's amended §48-7-27(a)(1)(B) text only enumerates "(i) married couple filing a joint return" ($30k) and "(ii) single taxpayer, head of household, or married taxpayer filing a separate return" ($15k) — SS is not enumerated. Historical mapping was SS=SINGLE-tier (2021: $4,600; 2022: $5,400; 2024: $12,000). The 2026 jump may be intentional (federal qualifying-widow conformity to joint) or an inadvertent tier switch. Document the rationale in a YAML comment or change to $15,000 if SS should match SINGLE.

  2. 2026 retirement cap not tested — the $70,000 raise is effective TY2027, not TY2026. Add a TY 2026 age-65+ filer with $66k–$70k pension to lock in that the cap is still $65,000.

  3. flat_rate.yaml description is two sentences — skill requires exactly one. Collapse to: "Georgia taxes all taxable income at this flat rate when gov.states.ga.tax.income.main.flat_applies is true (otherwise the per-filing-status progressive bracket structure applies)."

  4. Integration test sets fsla_overtime_premium: 3_000 without is_paid_hourly: true. Works today but is fragile. Set is_paid_hourly: true explicitly in overtime test cases.

  5. tip_income_deduction_occupation_requirement_met IRC §63 clause — bill §48-7-27(a)(17)(D)(ii) says "Occupations excluded under Section 63 of the Internal Revenue Code shall also be excluded." Repo uses the federal occupation check (Treasury Tipped Occupation Code + ~is_sstb). Verify the federal check captures the bill's §63 reference (likely yes, since the bill is loosely defining the SSTB exclusion via §63, which is the federal "taxable income defined" hook used in §199A).

  6. tip_income may not match the bill's "cash tips" definition — bill includes cash + charged tips but excludes mandatory service charges (where consequence-in-nonpayment, subject-to-negotiation, or determined-by-payor fails). PolicyEngine's tip_income is sparsely documented; likely defaults to voluntary tips. Reasonable approximation but worth a docstring note.

  7. Overtime "full-time hourly" not strictly enforcedis_eligible_for_fsla_overtime captures FLSA non-exempt (typically hourly) workers but does not enforce full-time hours threshold. Add a one-line docstring note.

  8. 2026 SD missing tests for HoH ($15k), SEPARATE ($15k), and SURVIVING_SPOUSE ($30k — especially given the tier question above).

  9. Overtime/tips boundary tests thin — only cap-clipping cases. Add: below-cap, zero earnings, multiple workers (verifies per-person cap, not per-tax-unit).

  10. flat_applies.yaml description verbose — technically one sentence (semicolon) but embeds five parameter paths. Suggest: "Georgia uses the flat-tax structure when true; otherwise the per-filing-status progressive bracket structure applies." Move detail to YAML comment.

  11. TY 2029 self-repeal test is brittlega_subtractions: 0 passes because all other 2029 subtractions evaluate to 0 with current inputs. Add a TY 2028 contrast case (exclusion DOES count) to make the intent explicit.

  12. Missing multi-person integration tests for the overtime/tips per-person cap.

Suggestions

  1. Trailing whitespace in retirement/cap/older.yaml:1 and main/{joint,head_of_household,surviving_spouse}.yaml:2. make format will clean these.

  2. Inline single-use intermediates in ga_qualified_overtime_exclusion.py:26-27 and ga_cash_tip_exclusion.py:27-28: return tax_unit.sum(min_(value, cap)).

  3. Single-element reference tuples in both new variable files — use plain string. The trailing inline comment can move to a code comment.

  4. flat_applies reference field missing — adding HB463 to flat_applies.yaml improves traceability even though the bill doesn't change the toggle value.

  5. retirement/cap/older.yaml reference title says "Section 2-3 amending O.C.G.A. § 48-7-27(a)(5)(A)(xiv)". Standard deduction is SECTION 2-3 per the manifest; retirement amendment is on pp.5-6. Verify the SECTION label.

  6. Split the subtractions.yaml HB463 reference into two entries — one for (a)(16) overtime at #page=6 and one for (a)(17) tips at #page=7 — since they live on different bill pages.

  7. ga_income_tax_before_non_refundable_credits.py pre-2024 branch (5 filing_status select(...) branches) could be simplified via a breakdown: filing_status parameter in a future PR. Out of scope here.

  8. Federal independence: no assertion that adjusted_gross_income is unchanged by the new GA exclusions. Add a federal-AGI-stable test case.

PDF Audit Summary

Category Count
Confirmed correct 21 (15 rates/SD/dep + 6 retirement/OT/tips)
Numerical mismatches 0
Spec gaps (in bill, not modeled) 1 critical (railway carve-out) + 2 medium (admin reporting, §63 clause)
Unmodeled trigger-conditional provisions Correct (documented in YAML comments)

Validation Summary

Check Result
Regulatory Accuracy 1 spec gap (railway), 2 approximations (SS tier, cash tips definition)
Reference Quality 7 missing #page= anchors, 2 minor SECTION-label / split-reference issues
Code Patterns 4 should-address (description format, whitespace, test setup), 7 suggestions
Test Coverage 4 critical gaps (refactor regression for HoH/MFS/SS + 2023 boundary + 2026 retirement); ~6 should-address gaps
PDF Value Audit 21 matches, 0 mismatches
CI Status 16 passing, 8 pending — no failures

Review Severity: REQUEST CHANGES

The critical items are: (1) the railway carve-out is a substantive bill provision that silently excludes an eligible group under the current implementation; (2) the refactor's regression surface (HoH/MFS/SS pre- and post-2024) is structurally under-tested; (3) the #page= anchor gap is mechanical but listed by the parameter-patterns skill as required. None of these is hard to address.

Next Steps

To auto-fix issues: /fix-pr 8306

- Add #page= anchors to all 7 HB463 references (flat_rate p.2, dependent
  p.3, standard deduction p.3, retirement older p.5, overtime p.6,
  tips p.7, subtractions split into p.6/p.7).
- Document railway carve-out (§48-7-27(a)(16)(B)) as a known
  under-modeling in ga_qualified_overtime_exclusion.py — FLSA-exempt
  railway workers receive no exclusion under the model despite the
  bill's explicit extension via collective bargaining agreements.
- Document the "cash tips" definition approximation (cash + charged,
  excluding mandatory service charges) in ga_cash_tip_exclusion.py
  and clarify that the SSTB exclusion via ~is_sstb is the standard
  federal proxy for the bill's IRC §63 clause.
- Add SURVIVING_SPOUSE rationale comment in standard deduction
  amount.yaml — JOINT-tier mapping ($30,000 in 2026) follows federal
  qualifying-widow(er) conformity to the joint standard deduction.
- Collapse flat_rate.yaml description to one sentence.
- Shorten flat_applies.yaml description and add HB463 reference.
- Inline single-use intermediates in both new variable formulas.
- Switch single-element reference tuples to plain strings.
- Fix retirement/cap/older.yaml SECTION label and trailing whitespace.
- Add 2023 progressive-bracket boundary test under SINGLE and
  SURVIVING_SPOUSE — locks the 2023 -> 2024 formula branch.
- Add 2024 flat-tax tests for HEAD_OF_HOUSEHOLD, SEPARATE, and
  SURVIVING_SPOUSE — refactor regression coverage.
- Add 2025 HEAD_OF_HOUSEHOLD flat-tax test.
- Add 2026 flat-tax tests for HEAD_OF_HOUSEHOLD, SEPARATE, and
  SURVIVING_SPOUSE.
- Add TY 2026 retirement-cap test confirming $65,000 still applies
  before the 2027 raise to $70,000.
- Add 2026 standard-deduction tests for HEAD_OF_HOUSEHOLD ($15k),
  SEPARATE ($15k), and SURVIVING_SPOUSE ($30k).
- Add multi-dependent test (3 children -> $15,000).
- Add sub-cap, zero-earnings, and multi-worker overtime/tips tests
  to validate the per-person cap applies before aggregation.
- Add TY 2028 contrast case showing exclusions DO apply in the last
  year before the 2029 self-repeal.
- Set is_paid_hourly: true on overtime test cases so eligibility
  preconditions are unambiguous.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Georgia HB463 (2025-2026): tax rate cut + standard deduction / dependent exemption increases + retirement exclusion + overtime/tips exemptions

1 participant